package com.itheima.stock.service;

import com.itheima.stock.common.domain.*;
import com.itheima.stock.pojo.StockBusiness;
import com.itheima.stock.vo.resp.BusinessRespVo;
import com.itheima.stock.vo.resp.CodeRespVo;
import com.itheima.stock.vo.resp.PageResult;
import com.itheima.stock.vo.resp.R;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 证券服务
 *
 * @author 呱呱
 * @date 2022/05/31
 */
public interface StockService {
    /**
     * 查询股票主营业务数据
     *
     * @return {@link List}<{@link StockBusiness}>
     */
    List<StockBusiness> getAll();
    /**
     * 获取最新国内A股大盘信息(上证+深证)
     *
     * @return {@link R}<{@link List}<{@link InnerMarketDomain}>>
     */
    R<List<InnerMarketDomain>> getInnerMarketInfos();

    /**
     *需求说明: 获取沪深两市板块最新数据，以交易总金额降序查询，取前10条数据
     * @return
     */
    R<List<StockBlockDomain>> sectorAllLimit();
    /**
     * 沪深两市个股涨幅分时行情数据查询，以时间顺序和涨幅查询前10条数据
     * @return
     */
    R<List<StockUpdownDomain>> stockIncreaseLimit();
    /**
     * 个股行情列表分页查询
     *
     * @param page     页面
     * @param pageSize 页面大小
     * @return {@link R}<{@link PageResult}<{@link StockUpdownDomain}>>
     */
    R<PageResult<StockUpdownDomain>> stockPageByTimeAndUpDown(Integer page, Integer pageSize);
    /**
     * 功能描述：沪深两市涨跌停分时行情数据查询，查询T日每分钟的涨跌停数据（T：当前股票交易日）
     * 		查询每分钟的涨停和跌停的数据的同级；
     * 		如果不在股票的交易日内，那么就统计最近的股票交易下的数据
     * 	 map:
     * 	    upList:涨停数据统计
     * 	    downList:跌停数据统计
     * @return
     */
    R<Map> upDownCount();
    /**
     * 将指定页的股票数据导出到excel表下
     *
     * @param response 响应
     * @param page     页面
     * @param pageSize 页面大小
     */
    void stockExport(HttpServletResponse response, Integer page, Integer pageSize);
    /**
     * 功能描述：统计国内A股大盘T日和T-1日成交量对比功能（成交量为沪市和深市成交量之和）
     *   map结构示例：
     *      {
     *         "volList": [{"count": 3926392,"time": "202112310930"},......],
     *       "yesVolList":[{"count": 3926392,"time": "202112310930"},......]
     *      }
     * @return
     */
    R<Map<String, List>> stockTradeVol4InnerMarket();
    /**
     * 查询当前时间下股票的涨跌幅度区间统计功能
     * 如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询点
     * @return
     */
    R<Map> stockUpDownScopeCount();
    /**
     * 功能描述：查询单个个股的分时行情数据，也就是统计指定股票T日每分钟的交易数据；
     *         如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询时间点
     * @param code 股票编码
     * @return
     */
    R<List<Stock4MinuteDomain>> stockScreenTimeSharing(String code);
    /**
     * 查询股票的日K线数据
     * @param stockCode 股票的编码
     * @return
     */
    R<List<Stock4EvrDayDomain>> getStockScreenDkLine(String stockCode);
    /**
     * 查询国外大盘信息数据
     *
     * @return {@link R}<{@link OuterMarketDomain}>
     */
    R<List<OuterMarketDomain>> getOuterMarketInfos();

    /**
     * 股票Code联想推荐功能
     *
     * @param code 代码
     * @return {@link R}<{@link List}<{@link CodeRespVo}>>
     */
    R<List<CodeRespVo>> getStockByCode(String code);
    /**
     * 根据股票编码查询个股主营业务
     *
     * @param code 代码
     * @return {@link R}<{@link BusinessRespVo}>
     */
    R<BusinessRespVo> getStockAccountByCode(String code);

    /**
     * 统计每周内的股票数据信息
     *
     * @param code 代码
     * @return {@link R}<{@link Map}>
     */
    R<List<Map>> getStockWeekDKLine(String code);
}
